<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        循环语句
          1.while循环
            语法：
                while(条件表达式) {
                    代码...
                }
          2.do-while循环
              do {
                代码...
              }while(条件表达式)

              跟while的区别：
                while是先判断再执行，do-while是先判断再执行。
                所以，do-while语句可以确保循环至少执行一次
          3.for循环

     */
      // let a = 0
      // while(a < 5) {
      //   alert(a)
      //   a++
      // }

      // 练习一：1000块存银行，利息是5%，存多少年能变成5000

      // let money = 1000
      // let year = 0
      // while(money < 5000){
      //   money*=1.05
      //   year++
      // }
      // alert(`需要${year}年,可获得${money.toFixed(2)}元`)

      let i = 10;
      do {
        console.log(i); // 10
      } while (i < 5);

      /* 求1000以内的水仙花数 (水仙花数至少是三位数)
      举个例子，153 百位数是1 十位数是5， 个位数是3
      1的3次幂 + 5的3次幂+3的3次幂 === 153
    */

      let startTime = Date.now();
      console.log("startTime----", startTime);
      for (let i = 100; i < 1000; i++) {
        // 获取百位数的数字
        let a = ~~(i / 100);
        // 获取十位数上的数字
        let b = ~~((i % 100) / 10);
        // 获取个位数上的数字
        let c = i % 10;

        if (a ** 3 + b ** 3 + c ** 3 === i) {
          console.log(`我是水仙花数---${i}`);
        }
      }
      let endTime = Date.now();
      console.log("endTime----", endTime);

      console.log(
        `循环结束时间 - 循环开始时间 = 循环运行时间${endTime - startTime}`
      );

      /* 寻找1000以内的质数 */
      // 分析：质数只能被1 和 它本身整除
      // 1. 找质数不好找，可以尝试找非质数，非质数：除了能被1和它本身之外整除，还存在其他数能整除
      // 2. 非质数也不好找，
      // let arr = []
      // for(let i = 2; i < 1000; i++) {
      //   arr.push(i)
      //   let num = arr.find(item => i % item === 0 && item < i)
      //   if(!num) {
      //     console.log(`我是质数${i}`)
      //   }
      // }
      // 以上写法依赖一个不断增大的数组，循环的效率也不高，对此做了些优化

      for (let i = 2; i < 1000; i++) {
        let isPrime = true; // 假设当前数字是质数
        for (let j = 2; j * j <= i; j++) {
          // 只需检查到 sqrt(i)
          if (i % j === 0) {
            // 如果能被整除
            isPrime = false; // 不是质数
            break; // 退出内层循环
          }
        }
        if (isPrime) {
          console.log(`我是质数${i}`);
        }
      }


    </script>
  </body>
</html>
